
# string


# 使用nchar()函数求字符串长度。

# 使用paste()合并字符串

a <- c("111")
b <- c("222")
print(paste(a,b,sep = "-"))

# 使用substr()读取字符串，substr(x, start, stop)

s <- c("R string ...")

print(substr(s,3,5))

# 使用strsplit()函数分割字符串，返回的是列表

a5<-"s t r i n g"
print(strsplit(a5," "))   #分割a5，分割位置是~


# 使用chartr()函数替换元素，chartr(old, new, x)，把x里的old换成new的
a7<-"字符串的替换"
print(chartr("替换","更改",a7))
# 注意：替换时，两个长度要相同，不然出问题

# 使用sprintf()函数
a9<-666
print(sprintf("你真%d",a9))     #对的a9里的数字替换了%d

#######

# #正则表达式
#
# 基本语法
#
# grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE)
# 参数说明
# pattern：要搜索的模式，可以是一个字符串或者字符向量。
# x：要搜索的字符向量。
# ignore.case：逻辑值，如果设置为TRUE，则忽略大小写。
# perl：逻辑值，如果设置为TRUE，则使用Perl兼容的正则表达式。
# value：逻辑值，如果设置为TRUE，则返回匹配的字符串，而不是它们的位置。
# fixed：逻辑值，如果设置为TRUE，则将模式视为固定字符串，不解释为正则表达式。

grep("A",c("a","b","A"))

a<-c("en","english","glish")  #这里有一个向量

grep("en",a)    #返回有en的元素的位置

grep("l.s",a)   #查找l与s，中间有一个随便的元素，返回2，3

grep("e..l",a)   #查找e至l，中间有两个元素

x <- c("apple", "banana", "cherry", "date")
grep("a", x)

grep("A", x, ignore.case = TRUE)

grep("a", x, fixed = TRUE)

grep("[aeiou]", x, perl = TRUE)


#2：sub(old,new,x)函数 ，gsub()函数

a<-c("a","c","d")
sub("c","hh",a)			#把c换成hh

a1<-c("aac","hhc","sss","cdd")
gsub("c","b",a1)             #将所有的c换成b

# 在R语言中，regexpr() 函数用于在字符串中匹配正则表达式模式，并返回匹配的位置。与grep()函数不同，regexpr()返回一个整数向量，表示每个匹配在字符串中的位置。
# regexpr(pattern, text, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE)
# 参数说明
# pattern：要搜索的模式，可以是一个字符串或者字符向量。
# text：要搜索的字符向量。
# ignore.case：逻辑值，如果设置为TRUE，则忽略大小写。
# perl：逻辑值，如果设置为TRUE，则使用Perl兼容的正则表达式。
# fixed：逻辑值，如果设置为TRUE，则将模式视为固定字符串，不解释为正则表达式。
# useBytes：逻辑值，如果设置为TRUE，则匹配基于字节而非字符。这在处理多字节字符集（如UTF-8）时可能很重要。
#
# 找到return pos 找不到 return -1


text <- c("apple", "baanana", "cherry", "date")
regexpr("aa", text)

# 在R语言中，gregexpr() 函数是regexpr()函数的一个变体，它用于在字符串中匹配正则表达式模式，并返回所有匹配的位置。与regexpr()函数不同，gregexpr()返回一个列表，列表中的每个元素是一个整数矩阵，表示每个字符串中所有匹配的位置。

# 基本语法

# gregexpr(pattern, text, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE)
# 参数说明
# pattern：要搜索的模式，可以是一个字符串或者字符向量。
# text：要搜索的字符向量。
# ignore.case：逻辑值，如果设置为TRUE，则忽略大小写。
# perl：逻辑值，如果设置为TRUE，则使用Perl兼容的正则表达式。
# fixed：逻辑值，如果设置为TRUE，则将模式视为固定字符串，不解释为正则表达式。
# useBytes：逻辑值，如果设置为TRUE，则匹配基于字节而非字符。这在处理多字节字符集（如UTF-8）时可能很重要。
# 返回值
# gregexpr() 返回一个列表，列表中的每个元素是一个整数矩阵。矩阵的每一行代表一个匹配，列代表匹配的起始位置。如果没有找到匹配，返回一个空矩阵。

text <- c("apple", "banana", "cherry", "date")
mat <- matrix(gregexpr("a", text))
mat<-gregexpr("A", text, ignore.case = TRUE)

mat <- gregexpr("^a", text, fixed = TRUE)

mat <- gregexpr("[aeiou]", text, perl = TRUE)

mat <- gregexpr("é", "café", useBytes = TRUE)
